Basic vi Commands |
* | vi filename | edit filename starting at line 1 |
---|---|---|
vi -r filename | recover filename that was being edited when system crashed | |
* | :x<Return> | quit vi, writing out modified file to file named in original invocation |
---|---|---|
:wq<Return> | quit vi, writing out modified file to file named in original invocation | |
:q<Return> | quit (or exit) vi | |
* | :q!<Return> | quit vi even though latest changes have not been saved for this vi call |
* | j or <Return>
[or down-arrow] | move cursor down one line |
---|---|---|
* | k [or up-arrow] | move cursor up one line |
* | h or <Backspace>
[or left-arrow] | move cursor left one character |
* | l or <Space>
[or right-arrow] | move cursor right one character |
* | 0 (zero) | move cursor to start of current line (the one with the cursor) |
* | $ | move cursor to end of current line |
w | move cursor to beginning of next word | |
b | move cursor back to beginning of preceding word | |
:0<Return> or 1G | move cursor to first line in file | |
:n<Return> or nG | move cursor to line n | |
:$<Return> or G | move cursor to last line in file | |
^f | move forward one screen | |
---|---|---|
^b | move backward one screen | |
^d | move down (forward) one half screen | |
^u | move up (back) one half screen | |
^l | redraws the screen | |
^r | redraws the screen, removing deleted lines | |
* | u | UNDO WHATEVER YOU JUST DID; a simple toggle |
---|
* | i | insert text before cursor, until <Esc> hit |
---|---|---|
I | insert text at beginning of current line, until <Esc> hit | |
* | a | append text after cursor, until <Esc> hit |
A | append text to end of current line, until <Esc> hit | |
* | o | open and put text in a new line below current line, until <Esc> hit |
* | O | open and put text in a new line above current line, until <Esc> hit |
* | r | replace single character under cursor (no <Esc> needed) |
---|---|---|
R | replace characters, starting with current cursor position, until <Esc> hit | |
cw | change the current word with new text,
starting with the character under cursor, until <Esc> hit | |
cNw | change N words beginning with character under cursor,
until <Esc> hit;
e.g., c5w changes 5 words | |
C | change (replace) the characters in the current line, until <Esc> hit | |
cc | change (replace) the entire current line, stopping when <Esc> is hit | |
Ncc or cNc | change (replace) the next N lines,
starting with the current line, stopping when <Esc> is hit | |
* | x | delete single character under cursor |
---|---|---|
Nx | delete N characters, starting with character under cursor | |
dw | delete the single word beginning with character under cursor | |
dNw | delete N words beginning with character under cursor;
e.g., d5w deletes 5 words | |
D | delete the remainder of the line, starting with current cursor position | |
* | dd | delete entire current line |
Ndd or dNd | delete N lines, beginning with the current line;
e.g., 5dd deletes 5 lines | |
yy | copy (yank, cut) the current line into the buffer | |
---|---|---|
Nyy or yNy | copy (yank, cut) the next N lines, including the current line, into the buffer | |
p | put (paste) the line(s) in the buffer into the text after the current line | |
/string | search forward for occurrence of string in text
| ?string
| search backward for occurrence of string in text
|
| n
| move to next occurrence of search string
|
| N
| move to next occurrence of search string in opposite
direction
| |
---|
:.= | returns line number of current line at bottom of screen
| :=
| returns the total number of lines at bottom of screen
|
| ^g
| provides the current line number, along with the total
number of lines, | in the file at the bottom of the screen |
---|
These commands permit you to input and output files other than the named file with which you are currently working.
:r filename<Return> | read file named filename and insert after
current line
(the line with cursor) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
:w<Return> | write current contents to file named in original
vi call
| :w newfile<Return>
| write current contents to a new file named newfile
|
| :12,35w smallfile<Return>
| write the contents of the lines numbered 12 through 35
to a new file named smallfile
|
| :w! prevfile<Return>
| write current contents over a pre-existing file
named prevfile
| |